1. Technical Field
The present invention relates generally to computer systems and in particular to a computer system designed as a system on a chip (SoC). Still more particularly, the present invention relates to a method and system for manipulating the placement of snoop pushes within a request FIFO of a SoC.
2. Description of the Related Art
The computer industry has made significant developments in integrated circuit (IC) technology in recent years. For example, ASIC (application specific integrated circuit) technology has evolved from a chip-set philosophy to an embedded core based system-on-a-chip (SoC) concept. The system-on-a-chip concept refers to a system in which, ideally, all the necessary integrated circuits are fabricated on a single die or substrate. An SoC IC includes various reusable functional blocks, such as microprocessors, interfaces (e.g., external bus interface), memory arrays, and DSPs (digital signal processors). Such pre-designed functional blocks are commonly called “cores”.
With a SoC, processed requests are sent from a core referred to as an initiator to a target (which may also be a core). An initiator (or master or busmaster as it is sometimes called) is any device capable of generating a request and placing that request on the bus to be transmitted to a target. Thus, for example, either a processor or DMA controller may be an initiator.
Targets (or slaves) are the receiving component that receives the initiator-issued requests and responds according to set protocols. A request is sometimes broadcasted to multiple targets, but based on some of the attributes of the request (such as the address), only one target “claims” the request and responds.
In order to complete the connections between initiators and targets, the SoC includes an on-chip bus utilized to connect multiple initiators and targets. The system bus consists of an interface to the caching-initiators and a separate interface to the targets and logic between the interfaces. The logic between the interfaces is called a “bus controller”. This configuration is typical among system-on-a-chip (SoC) buses, where all the initiators, targets and the bus controller are on the same chip (die). In current systems, this bus is referred to as processor local bus (PLB) and has associated logic, PLB Macro. The “PLB Macro” is a block of logic that acts as the bus controller, interconnecting all the devices (i.e., initiators and targets) of the SoC.
Some initiators, called “caching-initiators”, internally cache copies of the contents stored in the targets. The requests made by initiators may be “snoopable” or “non-snoopable”. Non-snoopable requests are delivered to one or more targets. Snoopable requests are delivered to one or more targets and are also broadcast to all the caching-initiators via the “snoop” bus. A “snooper” is the portion of a caching-initiator that attaches to the snoop bus. All “snoopers” provide a response to snoopable requests.
A caching-initiator includes a cache for holding duplicate contents of a target (memory), a request-port for initiating requests and a snoop-port for snooping the contents of the cache when other initiators access the targets. Occasionally, the caching-initiator includes a “modified” state, as a part of a cache coherency protocol such as MESI, MEI or MOESI. The “modified” state indicates that the line (associated segment of data) has been written to a new value, but the new value has not yet been copied to the target. When the caching-initiators snoop a request on the snoop-port that hits a dirty (modified) location in the initiator's cache, the caching-initiator retries the request and makes a snoop-push request on its request-port. This causes the new value to be copied to the target before the request is allowed to proceed.
If the caching-initiator has one or more requests pending and subsequently encounters a request on its snoop-port that causes the initiator to make a snoop-push, it is often necessary for the snoop-push to be granted on the system bus before the requests that were already pending from that caching-initiator. This is because the already pending requests may also require other caching-initiators to make snoop-pushes. In a system with more than one caching-initiator, these completion dependencies may result in a deadlock. Also, for performance reasons, it is desirable for a caching-initiator to complete its snoop-pushes as quickly as possible. Presently, however a snoop-push is placed within the FIFO and is forced to sit in the FIFO until all requests ahead of the snoop-push have issued. There is currently no way to ensure that the snoop-push operation is completed out-of-order with respect to the requests already in the request FIFO.
Also, to improve performance and minimize logic area, the request FIFO must be able to contain multiple snoop pushes without including additional request storage separate from the FIFO.
The present invention recognizes that it would be desirable to provide a method and system for dynamically and immediately executing snoop-push operations to a bus controller for completion. A system and method that enables a snoop-push operation to be placed ahead of previously issued requests within a request FIFO to prevent system deadlock while waiting for the snoop-push to complete would be a great improvement. These and other benefits are provided by the invention described herein.